﻿#region Đào Mạnh Hòa
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections;

namespace GUI.SoQuy
{
    public partial class frmNhapSoDu : Form
    {
        #region khởi tạo biến
        bool checkClose = false;
        bool checkTrangThai = false;
        Entities.SoDuSoQuy save;
        Entities.SoDuSoQuy[] hienthi;
        string makho = "";
        string tenkho = "";
        string year = "0";
        string month = "0";
        DateTime date;
        string hanhDong = "";
        Entities.SoDuSoQuy[] templv;
        int i = 0;

        public frmNhapSoDu()
        {
            InitializeComponent();
            try
            {
                Entities.CaiDatKho kho = Entitystatic.ViewFile();
                makho = kho.MaKho;
                tenkho = kho.TenKho;
                date = Entitystatic.date;
                year = cbbNam.Text = date.Year.ToString();
                month = cbbThang.Text = date.Month.ToString();
                txtSoDuDauKy.Focus();
                SelectData();
            }
            catch
            {
            }
        }

        void fix()
        {
            for (int i = 0; i < dgvHienThi.ColumnCount; i++)
            {
                dgvHienThi.Columns[i].Visible = false;
            }
            dgvHienThi.ReadOnly = true;
            dgvHienThi.Columns[Common.Constants.SoQuy.HanhDong].Visible = true;
            dgvHienThi.Columns[Common.Constants.SoQuy.SoDuDauKy].Visible = true;
            dgvHienThi.Columns[Common.Constants.SoQuy.SoDuCuoiKy].Visible = true;
            dgvHienThi.Columns[Common.Constants.SoQuy.HanhDong].HeaderText = "Mã Tài Khoản";
            dgvHienThi.Columns[Common.Constants.SoQuy.SoDuDauKy].HeaderText = "Tên Tài Khoản";
            dgvHienThi.Columns[Common.Constants.SoQuy.SoDuCuoiKy].HeaderText = "Số Dư Đầu Kỳ";
            dgvHienThi.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
            dgvHienThi.AllowUserToAddRows = false;
            dgvHienThi.AllowUserToDeleteRows = false;
            dgvHienThi.AllowUserToResizeRows = false;
            dgvHienThi.RowHeadersVisible = false;
        }
        #endregion

        #region Check Permission
        public bool CheckPer(int hanhdong)
        {
            return true;
        }
        #endregion

        #region select
        void SelectData()
        {
            try
            {
                ArrayList array = new ArrayList();
                hienthi = HienThi(makho);
                if (hienthi == null)
                {
                    lbTrangThai.Text = "Kỳ này chưa đóng";
                    lbTrangThai.ForeColor = Color.Black;
                    checkTrangThai = false;
                    dgvHienThi.DataSource = hienthi;
                    fix();
                    return;
                }

                foreach (Entities.SoDuSoQuy item in hienthi)
                {
                    string namkt = item.NgayKetChuyen.Year.ToString();
                    string thangkt = item.NgayKetChuyen.Month.ToString();

                    if (namkt == year && thangkt == month)
                    {
                        if (item.TrangThai == false)
                        {
                            lbTrangThai.Text = "Kỳ này chưa đóng";
                            lbTrangThai.ForeColor = Color.Black;
                            checkTrangThai = false;
                        }
                        else
                        {
                            lbTrangThai.Text = "Kỳ này đã khóa";
                            lbTrangThai.ForeColor = Color.Red;
                            checkTrangThai = true;
                        }
                        item.HanhDong = "1111";
                        item.SoDuCuoiKy = item.SoDuDauKy;
                        item.SoDuDauKy = "Tiền mặt việt nam";

                        array.Add(item);
                        break;
                    }
                    else
                    {
                        lbTrangThai.Text = "Kỳ này chưa đóng";
                        lbTrangThai.ForeColor = Color.Black;
                        checkTrangThai = false;
                    }
                }
                hienthi = (Entities.SoDuSoQuy[])array.ToArray(typeof(Entities.SoDuSoQuy));
                dgvHienThi.DataSource = hienthi;
                fix();
            }
            catch
            {
            }
        }

        public Entities.SoDuSoQuy[] HienThi(string makho)
        {
            try
            {
                Entities.SoDuSoQuy[] sodusoquy = Common.StaticVariable.InterfaceObject.SelectSoQuy(makho);
                return sodusoquy;
            }
            catch
            {
                return new Entities.SoDuSoQuy[0];
            }
        }
        #endregion

        #region Ghi lại
        void GhiLai()
        {
            try
            {
                if (!CheckPer(1))
                {
                    MessageBox.Show(Common.MSG.MSG10(), Common.MSG.TieuDe, MessageBoxButtons.OK);
                    return;
                }
                if (checkTrangThai)
                {
                    MessageBox.Show("Số dư đầu kỳ là kết chuyển từ kỳ trước - không thể thay đổi", "Hệ thống cảnh báo");
                    return;
                }

                string month1 = date.Month.ToString();
                if (month1 != month)
                {
                    MessageBox.Show("Không phải kỳ hiện tại", "Hệ thống cảnh báo");
                    return;
                }

                hienthi = Common.StaticVariable.InterfaceObject.SelectSoQuy(makho);
                if (hienthi != null)
                {
                    for (int i = 0; i < hienthi.Length; i++)
                    {
                        string monthkytruoc = (Convert.ToInt32(month) - 1).ToString();
                        string mm = hienthi[i].NgayKetChuyen.Month.ToString();
                        if (mm == monthkytruoc)
                        {
                            MessageBox.Show("Số dư đầu kỳ là kết chuyển từ kỳ trước - không thể thay đổi", "Hệ thống cảnh báo");
                            return;
                        }
                    }
                }

                string masd = getID();
                Entities.SoDuSoQuy temp = new Entities.SoDuSoQuy();
                temp.HanhDong = Common.Constants.Insert;
                temp.MaSoDuSoQuy = masd;
                temp.SoDuDauKy = templv[0].SoDuCuoiKy;
                temp.NgayKetChuyen = date;
                temp.SoDuCuoiKy = "0";
                temp.MaKho = makho;
                temp.TrangThai = false;
                if (Common.StaticVariable.InterfaceObject.InsertSoQuy(temp) == 0)
                {
                    return;
                }
                checkClose = true;
                this.Close();
            }
            catch
            {
            }

        }

        void ThemLV()
        {
            try
            {
                if (!CheckDataGridViewInsert())
                {
                    return;
                }
                if (txtSoDuDauKy.Text == "")
                {
                    MessageBox.Show("Bạn phải nhập Số dư đầu kỳ", Common.MSG.TieuDe, MessageBoxButtons.OK);
                    return;
                }
                string masd = getID();
                Entities.SoDuSoQuy temp = new Entities.SoDuSoQuy();
                temp.HanhDong = txtMaTaiKhoan.Text.ToString();
                temp.SoDuCuoiKy = txtSoDuDauKy.Text;
                temp.SoDuDauKy = txtTenTaiKhoan.Text.ToString();
                templv = new Entities.SoDuSoQuy[1];
                templv[0] = temp;
                dgvHienThi.DataSource = templv;
                fix();
            }
            catch
            {
            }
        }

        public string getID()
        {
            try
            {
                string str = "";
                Entities.GetID layid = new Entities.GetID();
                layid.TableName = "SoDuSoQuy";
                Entities.GetID lay = Common.StaticVariable.InterfaceObject.SelectID(layid);
                if (lay.ColumnName == null)
                {
                    return "SDSQ_0001";
                }
                str = Common.Utilities.ProcessID(lay.ColumnName);
                return str;
            }
            catch
            {
                return "SDSQ_0001";
            }
        }

        public bool CheckDataGridViewInsert()
        {

            if (hienthi != null)
            {
                if (hienthi.Length != 0)
                {
                    MessageBox.Show("Đã tồn tại số dư tháng này - không thể nhập thêm", "Hệ thống cảnh báo");
                    return false;
                }
                return true;
            }
            else
            {
                return true;
            }
        }
        #endregion

        #region xóa
        void Xoa()
        {
            try
            {
                if (save == null)
                    return;

                string month1 = date.Month.ToString();
                if (month1 != month)
                {
                    MessageBox.Show("Không phải kỳ hiện tại", "Hệ thống cảnh báo");
                    return;
                }

                hienthi = HienThi(makho);

                if (hienthi != null)
                {
                    for (int i = 0; i < hienthi.Length; i++)
                    {
                        string monthkytruoc = (Convert.ToInt32(month) - 1).ToString();
                        string mm = hienthi[i].NgayKetChuyen.Month.ToString();
                        if (mm == monthkytruoc)
                        {
                            MessageBox.Show("Số dư đầu kỳ là kết chuyển từ kỳ trước - không thể thay đổi", "Hệ thống cảnh báo");
                            return;
                        }
                    }
                }
                txtSoDuDauKy.Text = save.SoDuCuoiKy;
                if (hienthi.Length >= 1)
                {
                    Entities.SoDuSoQuy temp = new Entities.SoDuSoQuy();
                    temp.MaSoDuSoQuy = save.MaSoDuSoQuy;
                    if (Common.StaticVariable.InterfaceObject.DeleteSoQuy(temp) == 0)
                    {
                        return;
                    }
                    save = null;

                    SelectData();
                }
            }
            catch
            {
            }

        }

        void XoaLV()
        {
            try
            {
                if (hienthi == null)
                {
                    txtSoDuDauKy.Text = templv[0].SoDuCuoiKy;
                    templv = new Entities.SoDuSoQuy[0];
                    dgvHienThi.DataSource = templv;
                    fix();

                }
                else if (hienthi.Length == 0)
                {
                    txtSoDuDauKy.Text = templv[0].SoDuCuoiKy;
                    templv = new Entities.SoDuSoQuy[0];
                    dgvHienThi.DataSource = templv;
                    fix();
                }
                else
                {
                    if (MessageBox.Show("Bạn chắc chắn muốn xóa không?", Common.MSG.TieuDe, MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.Yes)
                    {
                        Xoa();
                    }
                }
            }
            catch
            { }
        }
        #endregion

        #region thoát
        void Thoat()
        {
            this.Close();
        }
        #endregion

        #region Event
        private void frmNhapSoDu_Load(object sender, EventArgs e)
        {
            this.FormClosing += new FormClosingEventHandler(frmNhapSoDu_FormClosing);
            btnGhiLai.Click += new EventHandler(btnGhiLai_Click);
            btnThemGV.Click += new EventHandler(btnThemGV_Click);
            btnThoat.Click += new EventHandler(btnThoat_Click);
            btnXoa.Click += new EventHandler(btnXoa_Click);
            dgvHienThi.CellClick += new DataGridViewCellEventHandler(dgvHienThi_CellClick);
            dgvHienThi.CellDoubleClick += new DataGridViewCellEventHandler(dgvHienThi_CellDoubleClick);
            dgvHienThi.KeyDown += new KeyEventHandler(dgvHienThi_KeyDown);
            txtSoDuDauKy.TextChanged += new EventHandler(txtSoDuDauKy_TextChanged);
            txtSoDuDauKy.KeyDown += new KeyEventHandler(txtSoDuDauKy_KeyDown);
            cbbNam.SelectedIndexChanged += new EventHandler(cbb_SelectedIndexChanged);
            cbbThang.SelectedIndexChanged += new EventHandler(cbb_SelectedIndexChanged); this.WindowState = FormWindowState.Maximized;
        }

        void cbb_SelectedIndexChanged(object sender, EventArgs e)
        {
            year = cbbNam.Text;
            month = cbbThang.Text;
            SelectData();
        }

        void txtSoDuDauKy_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyData == Keys.Enter)
            {
                ThemLV();
            }
        }

        void txtSoDuDauKy_TextChanged(object sender, EventArgs e)
        {
            TextBox temp = (TextBox)sender;
            int vt = temp.SelectionStart;
            string str = new string(temp.Text.ToList<char>().Where(c => char.IsNumber(c)).ToArray<char>());

            temp.Text = str;

            temp.SelectionStart = vt;
        }

        void dgvHienThi_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyData == Keys.Delete)
            {
                XoaLV();
            }
        }

        void dgvHienThi_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            XoaLV();
        }

        void dgvHienThi_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            i = e.RowIndex;
            if (i < 0)
                return;
            if (dgvHienThi.RowCount == 0)
                return;
            save = ((Entities.SoDuSoQuy[])dgvHienThi.DataSource)[i];
        }

        void btnXoa_Click(object sender, EventArgs e)
        {
            XoaLV();
        }

        void btnThoat_Click(object sender, EventArgs e)
        {
            Thoat();
        }

        void btnThemGV_Click(object sender, EventArgs e)
        {
            ThemLV();
        }

        void btnGhiLai_Click(object sender, EventArgs e)
        {
            GhiLai();
        }

        void frmNhapSoDu_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (!checkClose)
                if (MessageBox.Show(Common.MSG.MSG2(), Common.MSG.TieuDe, MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.Yes)
                {
                    e.Cancel = checkClose;
                }
                else
                    e.Cancel = !checkClose;
        }
        #endregion
    }
}
#endregion